home *** CD-ROM | disk | FTP | other *** search
/ HPAVC / HPAVC CD-ROM.iso / pc / BEERSRC.ZIP / ST.C < prev    next >
Encoding:
C/C++ Source or Header  |  1993-05-10  |  6.4 KB  |  208 lines

  1.  
  2. #include <string.h>
  3. #include <conio.h>
  4. #include <stdio.h>
  5. #include <alloc.h>
  6. #include <io.h>
  7. #include <fcntl.h>
  8. #include <sys\stat.h>
  9. #include <dos.h>
  10.  
  11.  
  12. char palette[768] = {
  13.    0x00,0x00,0x00,0x00,0x00,0x2A,0x00,0x2A,0x00,0x00,0x2A,0x2A,0x2A,0x00,0x00,0x2A,0x00,0x2A,0x2A,0x15,
  14.    0x00,0x2A,0x2A,0x2A,0x15,0x15,0x15,0x15,0x15,0x3F,0x15,0x3F,0x15,0x15,0x3F,0x3F,0x3F,0x15,0x15,0x3F,
  15.    0x15,0x3F,0x3F,0x3F,0x15,0x3F,0x3F,0x3F,0x3B,0x3B,0x3B,0x37,0x37,0x37,0x34,0x34,0x34,0x30,0x30,0x30,
  16.    0x2D,0x2D,0x2D,0x2A,0x2A,0x2A,0x26,0x26,0x26,0x23,0x23,0x23,0x1F,0x1F,0x1F,0x1C,0x1C,0x1C,0x19,0x19,
  17.    0x19,0x15,0x15,0x15,0x12,0x12,0x12,0x0E,0x0E,0x0E,0x0B,0x0B,0x0B,0x08,0x08,0x08,0x3F,0x00,0x00,0x3B,
  18.    0x00,0x00,0x38,0x00,0x00,0x35,0x00,0x00,0x32,0x00,0x00,0x2F,0x00,0x00,0x2C,0x00,0x00,0x29,0x00,0x00,
  19.    0x26,0x00,0x00,0x22,0x00,0x00,0x1F,0x00,0x00,0x1C,0x00,0x00,0x19,0x00,0x00,0x16,0x00,0x00,0x13,0x00,
  20.    0x00,0x10,0x00,0x00,0x3F,0x36,0x36,0x3F,0x2E,0x2E,0x3F,0x27,0x27,0x3F,0x1F,0x1F,0x3F,0x17,0x17,0x3F,
  21.    0x10,0x10,0x3F,0x08,0x08,0x3F,0x00,0x00,0x3F,0x2A,0x17,0x3F,0x26,0x10,0x3F,0x22,0x08,0x3F,0x1E,0x00,
  22.    0x39,0x1B,0x00,0x33,0x18,0x00,0x2D,0x15,0x00,0x27,0x13,0x00,0x3F,0x3F,0x36,0x3F,0x3F,0x2E,0x3F,0x3F,
  23.    0x27,0x3F,0x3F,0x1F,0x3F,0x3E,0x17,0x3F,0x3D,0x10,0x3F,0x3D,0x08,0x3F,0x3D,0x00,0x39,0x36,0x00,0x33,
  24.    0x31,0x00,0x2D,0x2B,0x00,0x27,0x27,0x00,0x21,0x21,0x00,0x1C,0x1B,0x00,0x16,0x15,0x00,0x10,0x10,0x00,
  25.    0x34,0x3F,0x17,0x31,0x3F,0x10,0x2D,0x3F,0x08,0x28,0x3F,0x00,0x24,0x39,0x00,0x20,0x33,0x00,0x1D,0x2D,
  26.    0x00,0x18,0x27,0x00,0x36,0x3F,0x36,0x2F,0x3F,0x2E,0x27,0x3F,0x27,0x20,0x3F,0x1F,0x18,0x3F,0x17,0x10,
  27.    0x3F,0x10,0x08,0x3F,0x08,0x00,0x3F,0x00,0x00,0x3F,0x00,0x00,0x3B,0x00,0x00,0x38,0x00,0x00,0x35,0x00,
  28.    0x01,0x32,0x00,0x01,0x2F,0x00,0x01,0x2C,0x00,0x01,0x29,0x00,0x01,0x26,0x00,0x01,0x22,0x00,0x01,0x1F,
  29.    0x00,0x01,0x1C,0x00,0x01,0x19,0x00,0x01,0x16,0x00,0x01,0x13,0x00,0x01,0x10,0x00,0x36,0x3F,0x3F,0x2E,
  30.    0x3F,0x3F,0x27,0x3F,0x3F,0x1F,0x3F,0x3E,0x17,0x3F,0x3F,0x10,0x3F,0x3F,0x08,0x3F,0x3F,0x00,0x3F,0x3F,
  31.    0x00,0x39,0x39,0x00,0x33,0x33,0x00,0x2D,0x2D,0x00,0x27,0x27,0x00,0x21,0x21,0x00,0x1C,0x1C,0x00,0x16,
  32.    0x16,0x00,0x10,0x10,0x17,0x2F,0x3F,0x10,0x2C,0x3F,0x08,0x2A,0x3F,0x00,0x27,0x3F,0x00,0x23,0x39,0x00,
  33.    0x1F,0x33,0x00,0x1B,0x2D,0x00,0x17,0x27,0x36,0x36,0x3F,0x2E,0x2F,0x3F,0x27,0x27,0x3F,0x1F,0x20,0x3F,
  34.    0x17,0x18,0x3F,0x10,0x10,0x3F,0x08,0x09,0x3F,0x00,0x01,0x3F,0x00,0x00,0x3F,0x00,0x00,0x3B,0x00,0x00,
  35.    0x38,0x00,0x00,0x35,0x00,0x00,0x32,0x00,0x00,0x2F,0x00,0x00,0x2C,0x00,0x00,0x29,0x00,0x00,0x26,0x00,
  36.    0x00,0x22,0x00,0x00,0x1F,0x00,0x00,0x1C,0x00,0x00,0x19,0x00,0x00,0x16,0x00,0x00,0x13,0x00,0x00,0x10,
  37.    0x3C,0x36,0x3F,0x39,0x2E,0x3F,0x36,0x27,0x3F,0x34,0x1F,0x3F,0x32,0x17,0x3F,0x2F,0x10,0x3F,0x2D,0x08,
  38.    0x3F,0x2A,0x00,0x3F,0x26,0x00,0x39,0x20,0x00,0x33,0x1D,0x00,0x2D,0x18,0x00,0x27,0x14,0x00,0x21,0x11,
  39.    0x00,0x1C,0x0D,0x00,0x16,0x0A,0x00,0x10,0x3F,0x36,0x3F,0x3F,0x2E,0x3F,0x3F,0x27,0x3F,0x3F,0x1F,0x3F,
  40.    0x3F,0x17,0x3F,0x3F,0x10,0x3F,0x3F,0x08,0x3F,0x3F,0x00,0x3F,0x38,0x00,0x39,0x32,0x00,0x33,0x2D,0x00,
  41.    0x2D,0x27,0x00,0x27,0x21,0x00,0x21,0x1B,0x00,0x1C,0x16,0x00,0x16,0x10,0x00,0x10,0x3F,0x3A,0x37,0x3F,
  42.    0x38,0x34,0x3F,0x36,0x31,0x3F,0x35,0x2F,0x3F,0x33,0x2C,0x3F,0x31,0x29,0x3F,0x2F,0x27,0x3F,0x2E,0x24,
  43.    0x3F,0x2C,0x20,0x3F,0x29,0x1C,0x3F,0x27,0x18,0x3C,0x25,0x17,0x3A,0x23,0x16,0x37,0x22,0x15,0x34,0x20,
  44.    0x14,0x32,0x1F,0x13,0x2F,0x1E,0x12,0x2D,0x1C,0x11,0x2A,0x1A,0x10,0x28,0x19,0x0F,0x27,0x18,0x0E,0x24,
  45.    0x17,0x0D,0x22,0x16,0x0C,0x20,0x14,0x0B,0x1D,0x13,0x0A,0x1B,0x12,0x09,0x17,0x10,0x08,0x15,0x0F,0x07,
  46.    0x12,0x0E,0x06,0x10,0x0C,0x06,0x0E,0x0B,0x05,0x0A,0x08,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  47.    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x31,0x0A,0x0A,0x31,
  48.    0x13,0x0A,0x31,0x1D,0x0A,0x31,0x27,0x0A,0x31,0x31,0x0A,0x27,0x31,0x0A,0x1D,0x31,0x0A,0x13,0x31,0x0A,
  49.    0x0A,0x31,0x0C,0x0A,0x31,0x17,0x0A,0x31,0x22,0x0A,0x31,0x2D,0x0A,0x2A,0x31,0x0A,0x1F,0x31,0x0A,0x14,
  50.    0x31,0x0B,0x0A,0x31,0x16,0x0A,0x31,0x21,0x0A,0x31,0x2C,0x0A,0x31,0x31,0x0A,0x2B,0x31,0x0A,0x20,0x31,
  51.    0x0A,0x15,0x31,0x0A,0x0A,0x3F,0x3F,0x3F
  52. };
  53.  
  54.  
  55.  
  56. int        xs, ys, n;
  57. unsigned   *sprite;
  58. int        tick;
  59.  
  60.  
  61. void setcolor(char *ptr)
  62. {
  63.    struct REGPACK regs;
  64.  
  65.    regs.r_ax = 0x1012;
  66.    regs.r_bx = 0;
  67.    regs.r_cx = 256;
  68.    regs.r_dx = (unsigned) ptr;
  69.    regs.r_es = _DS;
  70.    intr(0x10, ®s);
  71.  
  72. }
  73.  
  74.  
  75. void setattrib(int m)
  76. {
  77.    struct REGPACK regs;
  78.  
  79.    regs.r_ax = 0x1013;
  80.    regs.r_bx = (m << 8);
  81.    intr(0x10, ®s);
  82.  
  83. }
  84.  
  85.  
  86. void screenmode(int mode)
  87. {
  88.    struct REGPACK regs;
  89.  
  90.    regs.r_ax = mode;
  91.    intr(0x10, ®s);
  92.  
  93.    regs.r_ax = 0x0100;
  94.    regs.r_cx = 0x2000;
  95.    intr(0x10, ®s);
  96.  
  97. }
  98.  
  99.  
  100. void loadsprite(char *file)
  101. {
  102.    int      filvar;
  103.    unsigned size;
  104.    int      i;
  105.  
  106.    filvar = open(file, O_RDONLY | O_BINARY, S_IREAD);
  107.    if (filvar == -1) abort();
  108.  
  109.    read(filvar, &xs, 2);
  110.    read(filvar, &ys, 2);
  111.    read(filvar, &n, 2);
  112.  
  113.    size = filelength(filvar) - 6;
  114.    sprite = malloc(size);
  115.  
  116.    read(filvar, sprite, size);
  117.  
  118.    close(filvar);
  119.  
  120. }
  121.  
  122.  
  123. void setspeed(unsigned speed)
  124. {
  125.    outportb(0x43, 0x36);
  126.    outportb(0x40, speed & 0xff);
  127.    outportb(0x40, speed >> 8);
  128.    inportb(0x61);
  129.  
  130. }
  131.  
  132.  
  133. void interrupt new1c(void)
  134. {
  135.  
  136.     tick = 1;
  137.  
  138. }
  139.  
  140.  
  141.  
  142. void putsprite(int i)
  143. {
  144.    unsigned  far *scrptr;
  145.    unsigned  *data;
  146.    int   x, y;
  147.  
  148.    scrptr = MK_FP(0xa000, 0);
  149.    data = sprite + xs*ys*i/2;
  150.  
  151.    for (y = 0; y < ys; y++) {
  152.       for (x = 0; x < xs/2; x++) {
  153.      *scrptr = *data;
  154.      scrptr++; data++;
  155.          }
  156.      scrptr += 160 - xs/2;
  157.       }
  158.  
  159. }
  160.  
  161.  
  162.  
  163.  
  164. void main(void)
  165. {
  166.    int   i;
  167.    int   d;
  168.    int   speed;
  169.    void interrupt (*old)(void);
  170.    char  file[80];
  171.  
  172.  
  173.    printf("\n\n\nEnter sprite to animate [.SPR]: ");
  174.    fflush(stdin);
  175.    scanf("%s", file); strcat(file, ".SPR");
  176.    printf("Double each image (y/n) ");
  177.    fflush(stdin); scanf("%c", &i);
  178.    if ((i & 0xff) == 'y') d = 1; else d = 2;
  179.    speed = 0xe8f6;
  180.  
  181.    screenmode(0x13);
  182.    setcolor(palette);
  183.  
  184.    loadsprite(file);
  185.    n *= 2;
  186.  
  187.    old = getvect(0x1c); setvect(0x1c, new1c);
  188.  
  189.    setspeed(speed);
  190.    i = 0;
  191.    do {
  192.       putsprite(i/2);
  193.       i+=d; if (i >= n) i = 0;
  194.       while(!tick); tick = 0;
  195.    } while (!kbhit());
  196.    getch();
  197.  
  198.    setspeed(0);
  199.    setvect(0x1c, old);
  200.  
  201.    free(sprite);
  202.    screenmode(2);
  203.  
  204.  
  205. }
  206.  
  207.  
  208.